/////////////////////////////////
// Analizador Sintáctico ANTLR
/////////////////////////////////

parser grammar AnasintANTLR;

options {
  language = Java;
  tokenVocab = AnalexANTLR;
}

@header {
  package practpl.seis;
}

@members {
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
}

entrada: (instrucciones | expresion | exp_mult | exp_base)*;

instrucciones : IDENT COLON PARENTESISA EXPRESION SEPARACOM PARENTESISC MULT EOF_ SEPARADOR;
expresion: EXPRESION COLON EXP_MULT PARENTESISA masomenos EXP_MULT PARENTESISC MULT SEPARADOR;
exp_mult: EXP_MULT COLON EXP_BASE PARENTESISA multodiv EXP_BASE PARENTESISC MULT SEPARADOR;
exp_base: EXP_BASE COLON NUMERO OR PARENTESISACOM EXPRESION PARENTESISCCOM SEPARADOR;

masomenos: PARENTESISA COMILLAS MAS COMILLAS OR COMILLAS MENOS COMILLAS PARENTESISC;
multodiv: PARENTESISA COMILLAS MULT COMILLAS OR COMILLAS DIV COMILLAS PARENTESISC;